num = 255

# 转换为不同进制的字符串
bin_str = bin(num)
oct_str = oct(num)
hex_str = hex(num)

print(f"十进制 {num}:")
print(f"二进制  {bin_str}")  # 输出: 0b11111111
print(f"八进制  {oct_str}")  # 输出: 0o377
print(f"十六进制 {hex_str}")  # 输出: 0xff


# 将字符串转换成十进制整数
str = "abc"
print(int(str,16),end="\n")


# 将二进制字符串（不带前缀也可）转换为十进制
binary_string = "11111111"
# binary_string = "0b11111111" # 带前缀也可以
decimal_from_bin = int(binary_string, 2)
print(f"二进制 {binary_string} 是十进制 {decimal_from_bin}") # 输出: 255

# 将八进制字符串转换为十进制
octal_string = "377"
decimal_from_oct = int(octal_string, 8)
print(f"八进制 {octal_string} 是十进制 {decimal_from_oct}") # 输出: 255

# 将十六进制字符串转换为十进制
hex_string = "ff" # 大小写均可
# hex_string = "0xFF" # 带前缀也可以
decimal_from_hex = int(hex_string, 16)
print(f"十六进制 {hex_string} 是十进制 {decimal_from_hex}") # 输出: 255

# 甚至可以转换自定义进制的字符串，比如三进制
ternary_string = "100110"
decimal_from_ternary = int(ternary_string, 3)
print(f"三进制 {ternary_string} 是十进制 {decimal_from_ternary}") # 输出: 255 (1*3^5 + 1*3^2 + 1*3^1 = 255)


# 将十进制转成任何进制的方式 就是每次除以对应进制得到商和余数，每次得到的商再除以对应的要转换的机制，一直到商为0，
# 然后把每次除法得到余数反过来排列，就得到了对应的进制数了


x_num = 80
bin_x_num = bin(x_num) # 0b1010000
print(f"80的二进制表示为: {bin_x_num}")
print(f"{bin_x_num}在内存中占了{len(bin_x_num)-2}个比特位")
